/**
 * 获取 obj 的 当前 类型
 * @param {any}  obj
 */
function toStringTypeCheck(obj: any): string;

/**
 * 比对 obj 当前 类型 和 type 的 比对 结果
 * @param {any} obj
 * @param {string} type
 */
function toStringTypeCheck(obj: any, type: string): boolean;

/**
 * [比对|获取] 数据对象 当前的 类 名称
 * @param {any} obj 数据对象
 * @param {string | undefined} type	测定 数据类型 类 名称 [string|'any'|undefined]
 * @return {boolean | string} type 给定字符 返回 boolean || undefined 返回对象 当前的 类 名称
 */
function toStringTypeCheck(obj: any, type?: string): string | boolean {
  let a = toString.call(obj).slice(8, -1).toLowerCase();
  if (type == undefined) {
    return a;
  } else if (type.toLowerCase() == 'any') {
    return true;
  }
  // console.log(toString.call(obj).slice(8, -1))
  return a == type.toLowerCase();
}

/**
 * 验证 value 的类型 是否在 给定 limitStrArr 类型范围 内
 * @param {any} value obj[key] 的 值
 * @param {string[]} limitStrArr toStringTypeCheck 的 类型 数组
 * @returns
 */
function ValueLimitTypeCheck(value: any, limitStrArr: string | any[]) {
  for (let i = 0; i < limitStrArr.length; i++) {
    if (toStringTypeCheck(value, limitStrArr[i])) {
      return true;
    }
  }
  return false;
}

export { toStringTypeCheck, ValueLimitTypeCheck };
